home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / dev / robot.h < prev    next >
C/C++ Source or Header  |  1992-03-06  |  6KB  |  158 lines

  1. /* 
  2.  * robot.h --
  3.  *
  4.  *    Definitions and macros for the Exabyte EXB-120 robot device.
  5.  *
  6.  * Copyright 1992 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that this copyright
  10.  * notice appears in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * $Header: /sprite/src/lib/include/dev/RCS/robot.h,v 1.2 92/03/06 12:54:28 mani Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _ROBOT
  19. #define _ROBOT
  20.  
  21. #include <machparam.h>
  22.  
  23. /*
  24.  * The following structure is a parameter to an Fs_IOControl call.
  25.  * Obviously, not all the fields will be used for every call. For
  26.  * example, a MoveMedium command will only use sourceAddr and
  27.  * destAddr, and perhaps eePos.
  28.  */
  29.  
  30. typedef struct Dev_RobotCommand {
  31.     unsigned int    sourceAddr;     /* Address of tape to be moved. */
  32.     unsigned int    destAddr;      /* Destination of robot arm or of
  33.                      * tape to be moved. */
  34.     unsigned int    elemAddr;    /* Starting address of elements 
  35.                      * for the InitializeElemStatus 
  36.                      * command. */
  37.     unsigned int    numElements;    /* Number of elements to be 
  38.                      * initialized. */
  39.     unsigned int    allocLength;    /* Number of bytes allocated for
  40.                      * additional data. Command dependent. */
  41.     unsigned char     eePos;        /* What to do with the Entry/Exit port.
  42.                      * See the documentation on the Move/Medium
  43.                      * command. */
  44.     unsigned char     prevAllow;    /* For the Prevent/Allow removal command. */
  45.     unsigned char    range;        /* The range of elements to be scanned.
  46.                      * See the InitializeElemStatus command. */
  47.     unsigned char    volTag;        /* Used with the ReadElemStatus command. */
  48.     unsigned char    elemTypeCode;      /* Used with the ReadElemStatus command. */
  49.     unsigned char    pageControl;    /* Used with the ModeSense command. */
  50.     Address         dataPtr;    /* Address of data to be returned from
  51.                      * the device. */
  52.     unsigned int     dataLength;    /* Length of the data. */
  53.     unsigned int     savedPage;    /* Whether the ModeSelect changes are
  54.                      * stored in nonvolatile memory or not. */
  55.     unsigned char    mesgDisplay;    /* For the ModeSelect command.
  56.                      * 0 == Flashing 8-character display.
  57.                      * 1 == Steady 8-character display.
  58.                      * 2 == Scrolling display. */
  59.     char               *mesgString;    /* For the ModeSelect command.
  60.                      * The message to be displayed on
  61.                      * the front of the EXB-120. */
  62. } Dev_RobotCommand;
  63.  
  64.  
  65.  
  66. typedef struct ExbRobotInquiryData {
  67. #if BYTE_ORDER == BIG_ENDIAN
  68.     unsigned char type;         /* Peripheral device type */
  69.     unsigned char rmb:1;        /* Removable Medium bit. */
  70.     unsigned char qualifier:7;  /* Device type qualifier. */
  71.     unsigned char version;      /* Version info. */
  72.     unsigned char reserved:4;   /* reserved. */
  73.     unsigned char format:4;     /* Response format. */
  74. #else /* BYTE_ORDER == LITTLE_ENDIAN */
  75.     unsigned char type;        /* Peripheral device type. */
  76.     unsigned char qualifier:7;    /* Device Type qualifier. */
  77.     unsigned char rmb:1;    /* Removable Medium bit. */
  78.     unsigned char version;    /* Version info. */
  79.     unsigned char format:4;    /* Response format */
  80.     unsigned char reserved:4;    /* reserved. */
  81. #endif
  82.     unsigned char length;         /* Additional length of data returned. */
  83.     unsigned char reserved2[3];   /* More reserved and not supported. */
  84.     char          vendorID[8];  /* Vector identification. */
  85.     char          productID[16]; /* Product identification. */
  86.     char          revLevel[4]; /* Firmware identification. */
  87.     unsigned char reserved3[20];  /* More reserved. */
  88. } ExbRobotInquiryData; 
  89.  
  90.  
  91. typedef struct ExbRobotSenseData {
  92. #if BYTE_ORDER == BIG_ENDIAN
  93.     unsigned char valid:1;    /* Reserved. */
  94.     unsigned char errorClass:3;    /* Binary 111 on EXB. */
  95.     unsigned char errorCode:4;    /* 0 on EXB. */
  96.     unsigned char segmentNum;    /* 0 on EXB. */
  97.     unsigned char filemark:1;    /* The following three are 0 on EXB. */
  98.     unsigned char eom:1;
  99.     unsigned char ili:1;
  100.     unsigned char reserved:1;
  101.     unsigned char senseKey:4;    /* 0x0 : No Sense
  102.                  * 0x2 : Not Ready
  103.                  * 0x4 : Hardware Error
  104.                  * 0x5 : Illegal Request
  105.                  * 0x6 : Unit Attention
  106.                  * 0xb : Aborted Command
  107.                  */
  108.     unsigned char infoBytes[4];
  109.     unsigned char addlSenseLen;    /* Number of additional bytes of
  110.                  * sense data.
  111.                  */
  112.     unsigned char commandSpecific[4];
  113.     unsigned char addlSenseCode;
  114.     unsigned char addlSenseCodeQualfr;
  115.     unsigned char fruCode;
  116.     unsigned char sksv:1;
  117.     unsigned char senseKeySpecfc1:7;
  118.     unsigned char senseKeySpecfc2[2];
  119. #else /* BYTE_ORDER == LITTLE_ENDIAN */
  120.     unsigned char errorCode:4;
  121.     unsigned char errorClass:3;
  122.     unsigned char valid:1;
  123.     unsigned char segmentNum;
  124.     unsigned char senseKey:4;
  125.     unsigned char reserved:1;
  126.     unsigned char ili:1;
  127.     unsigned char eom:1;
  128.     unsigned char filemark:1;
  129.     unsigned char infoBytes[4];
  130.     unsigned char addlSenseLen;
  131.     unsigned char commandSpecific[4];
  132.     unsigned char addlSenseCode;
  133.     unsigned char addlSenseCodeQualfr;
  134.     unsigned char fruCode;
  135.     unsigned char senseKeySpecfc1:7;
  136.     unsigned char sksv:1;
  137.     unsigned char senseKeySpecfc2[2];
  138. #endif
  139. } ExbRobotSenseData;
  140.  
  141.  
  142. #define IOC_ROBOT_INIT_ELEM_STATUS     62
  143. #define IOC_ROBOT_READ_ELEM_STATUS    63
  144. #define IOC_ROBOT_INQUIRY        64
  145. #define IOC_ROBOT_REQ_SENSE        65
  146. #define IOC_ROBOT_MOVE_MEDIUM        66
  147. #define IOC_ROBOT_POS_ELEM        67
  148. #define IOC_ROBOT_MODE_SEL        68
  149. #define IOC_ROBOT_MODE_SENSE        69
  150. #define IOC_ROBOT_NO_OP            70
  151. #define IOC_ROBOT_PREV_REMOVAL        71
  152. #define IOC_ROBOT_DISPLAY        72
  153.  
  154. #endif /* _ROBOT */
  155.  
  156.  
  157.  
  158.